;(function () {
  class Dialog {
    constructor(options) {
      // 把传递进来的配置信息挂载到实例上(以后可以基于实例在各个地方拿到这个信息)
      for (let key in options) {
        if (!options.hasOwnProperty(key)) break
        // 关于TEMPLATE的(统一为DOM对象)
        if (key === 'template') {
          let val = options[key]
          if (typeof val === 'string') {
            let P = document.createElement('p')
            P.innerHTML = val
            options[key] = P
          }
        }
        this[key] = options[key]
      }

      // 开始执行
      this.init()
    }
    // 初始化: 通过执行INIT控制逻辑的进行
    init() {
      //
      if (this.status === 'message') {
        // 创建一个message盒子
        this.createMessage()
        this.open()
        return
      }
    }
    // 创建元素
    createMessage() {
      //
      this.messageBox = document.createElement('div')
      this.messageBox.className = `dpn-message dpn-${this.type}`
      this.messageBox.innerHTML = `
        ${this.message}
        <i class="dpn-close">X</i>
      `
      document.body.appendChild(this.messageBox)
    }
    createDialog() {}

    // 控制显示
    open() {
      if (this.status === 'message') {
        this.messageBox.style.top = '20px'
        return
      }
    }

    // 控制隐藏
    close() {}
  }

  let _anonymous = Function.prototype

  // 要往全局上暴露两个方法
  window.messageplugin = function messageplugin(options = {}) {
    // options可以是文字，也可以是一个对象

    // init params 参数初始化
    if (typeof options === 'string') {
      // 如果传进来的只是一个字符串，也让options变成对象
      options = {
        message: options,
      }
    }
    options = Object.assign(
      {
        status: 'message',
        // 提示的文案内容
        message: '',
        // 展示的类型 info/warning/success/error
        type: 'info',
        // 自动消失的时间，设置为零则不会自动消失
        duration: 3000,
        // 钩子函数， 创建/打开/关闭
        // 默认是一个空函数，以后options里面的函数，会覆盖掉这些默认函数
        // oninit() {},
        // onopen() {},
        // onclose() {},

        // 也可以这样来设置默认空函数
        oninit: _anonymous,
        onopen: _anonymous,
        onclose: _anonymous,
      },
      options
    )
    return new Dialog(options)
  }
  window.dialogplugin = function dialogplugin(options = {}) {
    // init params
    options = Object.assign(
      {
        // 声明是dialog模态框类型
        status: 'dialog',
        // 内容模板 字符串/DOM元素对象
        template: null,
        // 提示的标题信息
        title: '系统提示',
        // 自定义按钮组信息
        buttons: [],
        // 钩子函数 创建/打开/关闭
        // oninit() {},
        // onopen() {},
        // onclose() {},

        // 默认空函数，也可以这样写
        oninit: _anonymous,
        onopen: _anonymous,
        onclose: _anonymous,
      },
      options
    )
    return new Dialog(options)
  }
})()
